<?php


namespace app\admin\controller;



use think\Controller;
use think\facade\App;
use think\facade\Request;
use think\image;

class Uploader extends Base
{

    public  function handel_doc()
    {
        // 获取表单上传文件
        // 上传文件错误或者文件验证不通过时，都会抛出异常，所以要使用try来捕捉异常
        try {
            // 获取上传的文件，如果有上传错误，会抛出异常
            $file = \think\Facade\Request::file('file');
            // 如果上传的文件为null，手动抛出一个异常，统一处理异常
            if (null === $file) {
                // 异常代码使用UPLOAD_ERR_NO_FILE常量，方便需要进一步处理异常时使用
                throw new \Exception('请上传文件', UPLOAD_ERR_NO_FILE);
            }

            // 使用验证器验证上传的文件
            validate(['file' => [
                // 限制文件大小(单位b)，这里限制为4M
                'fileSize' => 4 * 1024 * 1024,
                // 限制文件后缀，多个后缀以英文逗号分割
                'fileExt'  => 'doc,docx,pdf'
                // 更多规则请看“上传验证”的规则，文档地址https://www.kancloud.cn/manual/thinkphp6_0/1037629#_444
            ]])->check(['file' => $file]);

            // 保存路径，实际保存路径为“磁盘路径” + “avatar”
            $path = 'files';
            // 文件名规则，默认是当前时间。可以使用哈希算法，如：md5,sha1等。还可以传入匿名函数
            $rule =  'md5';
            // 将文件保存public磁盘，文件名为$rule指定的规则。然后将文件路径赋值给$path
            $path = \think\Facade\Filesystem::disk('public')->putFile($path,$file, $rule);
            // 拼接URL路径
            $path  = \think\Facade\Filesystem::getDiskConfig('public', 'url') . '/' . str_replace('\\', '/', $path);
            $url=Request::domain().$path ;
            $msg='上传成功';
            $status=200;
        } catch (\Exception $e) {
            // 如果上传时有异常，会执行这里的代码，可以在这里处理异常
                $url='';
                $path='';
                $msg= $e->getMessage();
                $status=0;
        }
        $data=array('url'=>$url,'path'=>$path);
        $meta=[
            'msg'=>$msg,
            'status'=>$status
        ];
        $res=[
            'data'=>$data,
            'meta'=>$meta
        ];
        return json($res);
    }
    public  function pic_shu()
    {
        // 获取表单上传文件
        // 上传文件错误或者文件验证不通过时，都会抛出异常，所以要使用try来捕捉异常
        try {
            // 获取上传的文件，如果有上传错误，会抛出异常
            $file = \think\Facade\Request::file('file');
            // 如果上传的文件为null，手动抛出一个异常，统一处理异常
            if (null === $file) {
                // 异常代码使用UPLOAD_ERR_NO_FILE常量，方便需要进一步处理异常时使用
                throw new \Exception('请上传文件', UPLOAD_ERR_NO_FILE);
            }

            // 使用验证器验证上传的文件
            validate(['file' => [
                // 限制文件大小(单位b)，这里限制为4M
                'fileSize' => 20 * 1024 * 1024,
                // 限制文件后缀，多个后缀以英文逗号分割
                'fileExt'  => 'jpg,png'
                // 更多规则请看“上传验证”的规则，文档地址https://www.kancloud.cn/manual/thinkphp6_0/1037629#_444
            ]])->check(['file' => $file]);

            // 保存路径，实际保存路径为“磁盘路径” + “avatar”
            $path = 'files';
            // 文件名规则，默认是当前时间。可以使用哈希算法，如：md5,sha1等。还可以传入匿名函数
            $rule =  'md5';
            // 将文件保存public磁盘，文件名为$rule指定的规则。然后将文件路径赋值给$path
            $path = \think\Facade\Filesystem::disk('public')->putFile($path,$file, $rule);
            $path='./storage/'.str_replace('\\', '/', $path); //去掉反斜杠
            $dirpath=dirname($path).'/';  //文件所在目录
            $fileName = basename($path); //
            $fileext=  substr(strrchr($fileName, '.'), 1);
            $filefisrstname=basename($fileName,".".$fileext); //去掉后缀
            $image =\think\Image::open($path);
            $thumb_path = $dirpath.$filefisrstname.'_175.'.$fileext;

           $image->thumb(175, 240,\think\Image::THUMB_CENTER  )->save($thumb_path );

            // 拼接URL路径
            $url=Request::domain().$thumb_path ;

            $msg='上传成功';
            $status=200;
        } catch (\Exception $e) {
            // 如果上传时有异常，会执行这里的代码，可以在这里处理异常
            $url='';
            $path='';
            $msg= $e->getMessage();
            $status=0;
        }
        $data=array('url'=>$url,'path'=>$path);
        $meta=[
            'msg'=>$msg,
            'status'=>$status
        ];
        $res=[
            'data'=>$data,
            'meta'=>$meta
        ];
        return json($res);
    }

    public  function pic_heng()
    {
        // 获取表单上传文件
        // 上传文件错误或者文件验证不通过时，都会抛出异常，所以要使用try来捕捉异常
        try {
            // 获取上传的文件，如果有上传错误，会抛出异常
            $file = \think\Facade\Request::file('file');
            // 如果上传的文件为null，手动抛出一个异常，统一处理异常
            if (null === $file) {
                // 异常代码使用UPLOAD_ERR_NO_FILE常量，方便需要进一步处理异常时使用
                throw new \Exception('请上传文件', UPLOAD_ERR_NO_FILE);
            }

            // 使用验证器验证上传的文件
            validate(['file' => [
                // 限制文件大小(单位b)，这里限制为4M
                'fileSize' => 20 * 1024 * 1024,
                // 限制文件后缀，多个后缀以英文逗号分割
                'fileExt'  => 'jpg,png'
                // 更多规则请看“上传验证”的规则，文档地址https://www.kancloud.cn/manual/thinkphp6_0/1037629#_444
            ]])->check(['file' => $file]);

            // 保存路径，实际保存路径为“磁盘路径” + “avatar”
            $path = 'files';
            // 文件名规则，默认是当前时间。可以使用哈希算法，如：md5,sha1等。还可以传入匿名函数
            $rule =  'md5';
            // 将文件保存public磁盘，文件名为$rule指定的规则。然后将文件路径赋值给$path
            $path = \think\Facade\Filesystem::disk('public')->putFile($path,$file, $rule);
            $path='./storage/'.str_replace('\\', '/', $path); //去掉反斜杠
            $dirpath=dirname($path).'/';  //文件所在目录
            $fileName = basename($path); //
            $fileext=  substr(strrchr($fileName, '.'), 1);
            $filefisrstname=basename($fileName,".".$fileext); //去掉后缀
            $image =\think\Image::open($path);
            $thumb_path = $dirpath.$filefisrstname.'_175.'.$fileext;

            $image->thumb(720, 480,\think\Image::THUMB_CENTER  )->save($thumb_path );

            // 拼接URL路径
            $url=Request::domain().$thumb_path ;

            $msg='上传成功';
            $status=200;
        } catch (\Exception $e) {
            // 如果上传时有异常，会执行这里的代码，可以在这里处理异常
            $url='';
            $path='';
            $msg= $e->getMessage();
            $status=0;
        }
        $data=array('url'=>$url,'path'=>$path);
        $meta=[
            'msg'=>$msg,
            'status'=>$status
        ];
        $res=[
            'data'=>$data,
            'meta'=>$meta
        ];
        return json($res);
    }
}
